const { ListNode, LinkedList } = require('../2. 链表/1. 链表基础/1. 建立线性链表.js')
// 给定一个链表，按顺序每两个节点交换以下，并返回交换后的链表，要求需要实际进行节点交换，而不是只改变节点内部的值
// 思路，找到需要交换的两个节点的前面的节点cur， cur的后面的两个节点分别是node1和node2，依次处理交换指针，直到不满足条件

function swapPairs(head) {
    let dummyHead = new ListNode(0, head)
    let cur = dummyHead
    while (cur.next && cur.next.next) {
        let node1 = cur.next
        let node2 = cur.next.next
        cur.next = node2
        node1.next = node2.next
        node2.next = node1
        // 此时node1已经是交换后的位置了
        cur = node1
    }
    return dummyHead.next
}

let head = [1,2,3,4]
const list = new LinkedList(head)
console.log(swapPairs(list.head))